home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / StartupTools / LoadKickC0.lha / LoadKickC0 / src / LoadKickC0.c < prev    next >
C/C++ Source or Header  |  1992-01-03  |  3KB  |  115 lines

  1. /****************************************************************************
  2. *                                                                           *
  3. * LoadKickC0 V1.1 -- Copyright 1992 by Matthias Scheler                     *
  4. *                                                                           *
  5. *      This program may be freely copied, as long as all copyright          *
  6. *      notices are left intact and unchanged.                               *
  7. *                                                                           *
  8. ****************************************************************************/
  9.  
  10. #include <exec/memory.h>
  11. #include <exec/execbase.h>
  12.  
  13. #include <proto/dos.h>
  14. #include <proto/exec.h>
  15.  
  16. #include <stdlib.h>
  17.  
  18. char *VersionString = "$VER: LoadKickC0 V1.1";
  19.  
  20. extern struct ExecBase *SysBase;
  21.  
  22. #define EXTMEMSTART   0xC00000L
  23. #define EXTMEMMINSIZE (EXTMEMSTART+0x80000L)
  24.  
  25. #define KICK20SIZE    0x080000L
  26. #define KICKVERSID    0x2500AFL
  27.  
  28. #define DELAY 3L
  29.  
  30. extern void __stdargs StartKick(ULONG *,ULONG *);
  31. extern void __stdargs printf(char *,...);
  32.  
  33. BPTR stdout;
  34.  
  35. void main(long argc,char **argv)
  36.  
  37. {
  38.  BPTR Handle;
  39.  ULONG KickFileHeader[2];
  40.  ULONG *KickImage;
  41.  
  42.  stdout=Output();
  43.  
  44.  if (argc==0L) exit (20L);
  45.  printf ("LoadKickC0 V1.1 -- (c) 1992 by Matthias Scheler\n\n");
  46.  
  47.  if (SysBase->LibNode.lib_Version>34)
  48.   {
  49.    printf ("LoadKickC0 will only run under Kickstart 1.2/1.3\n");
  50.    exit (5L);
  51.   }
  52.  
  53.  if ((((ULONG)SysBase&0xFFFF0000L)!=EXTMEMSTART)||
  54.      ((ULONG)SysBase->MaxExtMem<EXTMEMMINSIZE))
  55.   {
  56.    printf ("You must have a 1 MB or greater memory board at $%lx\n",EXTMEMSTART);
  57.    exit (10);
  58.   }
  59.  
  60.  if (argc<2L)
  61.   {
  62.    printf ("Usage: LoadKickC0 KICKFILE\n");
  63.    exit (10);
  64.   }
  65.  
  66.  if ((Handle=Open(argv[1],MODE_OLDFILE))==NULL)
  67.   {
  68.    printf ("Can't open %s\n",argv[1]);
  69.    exit (10);
  70.   }
  71.  if (Read(Handle,(char *)KickFileHeader,8L)!=8L)
  72.   {
  73.    Close (Handle);
  74.    printf ("Error while reading %s\n",argv[1]);
  75.    exit (10);
  76.   }
  77.  if ((KickFileHeader[0]!=0L)||(KickFileHeader[1]!=KICK20SIZE))
  78.   {
  79.    Close (Handle);
  80.    printf ("%s contains a bad header\n",argv[1]);
  81.    exit (10);
  82.   }
  83.  if ((KickImage=AllocMem(KICK20SIZE,MEMF_PUBLIC))==NULL)
  84.   {
  85.    Close (Handle);
  86.    printf ("Out of memory\n");
  87.    exit (10);
  88.   }
  89.  if (Read(Handle,(char *)KickImage,KICK20SIZE)!=KICK20SIZE)
  90.   {
  91.    FreeMem (KickImage,KICK20SIZE);
  92.    Close (Handle);
  93.    printf ("Error while reading %s\n",argv[1]);
  94.    exit (10);
  95.   }
  96.  Close (Handle);
  97.  if (KickImage[3]!=KICKVERSID)
  98.   {
  99.    FreeMem (KickImage,KICK20SIZE);
  100.    printf ("Kickstart must be V%d.%d\n",KICKVERSID);
  101.    exit (10);
  102.   }
  103.  
  104.  printf ("Rebooting in %ld seconds press <CTRL>-C to abort\n",DELAY);
  105.  Delay (DELAY*TICKS_PER_SECOND);
  106.  if (SetSignal(0L,SIGBREAKF_CTRL_C)&SIGBREAKF_CTRL_C)
  107.   {
  108.    FreeMem (KickImage,KICK20SIZE);
  109.    printf ("\naborted\n");
  110.    exit (0L);
  111.   }
  112.  
  113.  StartKick(KickImage,(ULONG *)EXTMEMSTART);
  114. }
  115.